﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Mvc;
using Proxy;
using SIM.Geo.UI.Movil.Clases;


namespace SIM.Geo.UI.Movil.Controllers
{
    public class SondajeController : BaseController
    {

        //
        // GET: /Sondaje/

        public ActionResult Index()
        {

            return View();

        }
        /// <summary>
        /// Método listar sondaje por zona, anio, estado, categoria
        /// </summary>
        /// <param name="zona"></param>
        /// <param name="anio"></param>
        /// <param name="estado"></param>
        /// <param name="catego"></param>
        /// <returns></returns>
        public JsonResult Listar(int zona, string anio, int estado, int catego)
        {

            using (SESondajeClient proxy = new SESondajeClient())
            {
                var lista = proxy.BuscarSondaje("", anio, zona, estado, catego, 1);
                return Json(lista, JsonRequestBehavior.AllowGet);
            }


        }
        /// <summary>
        /// Método crear un sondaje
        /// </summary>
        /// <param name="entidad"></param>
        /// <returns></returns>
        [HttpPost]
        public JsonResult Create(Sondaje entidad)
        {
            Resultado retorno = new Resultado();
            try
            {
                bool flag_exito = true;
                if (flag_exito)
                {
                    using (var proxy = new SESondajeClient())
                    {
                        var lista = proxy.ListarSondajePorNombreDDH(entidad.NombreDDH);
                        if (lista.ToList().Count > 0)
                        {
                            retorno.code = Constantes.CodigoAplicacion.COD_ERROR_PERSONALIZADO;
                            retorno.result = 0;
                            retorno.message = "Sondaje con Nombre DDH: " + entidad.NombreDDH + " ya existe, verifique el número";
                            flag_exito = false;
                        }
                    }
                }
                if (flag_exito)
                {
                    var sondaje = entidad;
                    using (var proxy = new SESondajeClient())
                    {
                        sondaje.CodigoClaseSondaje = 1;
                        sondaje.CumpleLitologia = 1;
                        sondaje.CumpleMuestra = 1;
                        sondaje.CumpleGeomecanica = 1;
                        sondaje.CumpleEstructura = 1; //Modificado por Edgar
                        sondaje.Estado = 1;
                        sondaje.CodigoGeologo = UserLogon.CodigoGeologo;

                        var obj = proxy.InsertarSondaje(sondaje);
                        retorno.result = 1;
                        retorno.message = Constantes.MensajeGenerico.MSG_OK_GRABAR; ;
                    }
                }
            }

            catch (Exception ex)
            {
                retorno.result = 0;
                retorno.message = Constantes.MensajeGenerico.MSG_ERROR_GRABAR;
                Logger.Error("Sondaje Controller:Listar",this.UserLogon.CodigoUsuario, ex);
            }

            return Json(retorno, JsonRequestBehavior.AllowGet);
        }


        //metodo get
        /// <summary>
        /// Método editar sondaje
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public JsonResult Edit(int id)
        {
            Resultado retorno = new Resultado();

            try
            {
                using (var proxy = new SESondajeClient())
                {
                    var obj = proxy.ObtenerSondaje(id);
                    obj.Labor = null;

                    if (obj.Geologo == null)
                    {
                        using (var proxyGeo = new SEGeologoClient())
                        {
                            obj.Geologo = proxyGeo.ObtenerGeologo(obj.CodigoGeologo);
                        }
                    }
                    retorno.result = 1;
                    retorno.message = Constantes.MensajeGenerico.MSG_OK_GENERICO;
                    retorno.data = Json(obj, JsonRequestBehavior.AllowGet);

                }
            }
            catch (Exception ex)
            {
                retorno.result = 0;
                retorno.message = Constantes.MensajeGenerico.MSG_ERROR_GENERICO;
                Logger.Error("Sondaje Controller:Editar", this.UserLogon.CodigoUsuario,ex);

            }

            return Json(retorno, JsonRequestBehavior.AllowGet);
        }

        //metodo get
        /// <summary>
        /// Método para obtener un sondaje
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public JsonResult GetById(int id)
        {
            Resultado retorno = new Resultado();
            try
            {
                using (var proxy = new SESondajeClient())
                {
                    var obj = proxy.ObtenerSondaje(id);
                    obj.Labor = null;

                    if (obj != null)
                    {
                        using (var proxyGeo = new SEGeologoClient())
                        {
                            obj.Geologo = proxyGeo.ObtenerGeologo(obj.CodigoGeologo);
                        }
                    }
                    retorno.result = 1;
                    retorno.message = Constantes.MensajeGenerico.MSG_OK_GENERICO;
                    retorno.data = Json(obj, JsonRequestBehavior.AllowGet);


                }
            }
            catch (Exception ex)
            {
                retorno.result = 0;
                retorno.message = Constantes.MensajeGenerico.MSG_ERROR_GENERICO;
                Logger.Error("Sondaje Controller:GetById",this.UserLogon.CodigoUsuario, ex);

            }

            return Json(retorno, JsonRequestBehavior.AllowGet);
        }

        //Metodo Post
        /// <summary>
        /// Metodo para modificar sondaje
        /// </summary>
        /// <param name="entidad"></param>
        /// <returns></returns>
        [HttpPost]
        public JsonResult Modificar(Sondaje entidad)
        {
            Resultado retorno = new Resultado();
            try
            {
                var sondaje = entidad;
                using (var proxy = new SESondajeClient())
                {
                    sondaje.CodigoClaseSondaje = 1;
                    sondaje.CumpleLitologia = 1;
                    sondaje.CumpleMuestra = 1;
                    sondaje.CumpleGeomecanica = 1;
                    sondaje.CumplioEstructura = 1;
                    sondaje.Labor = null;
                    sondaje.CodigoGeologo = UserLogon.CodigoGeologo;
                    proxy.ModificarSondaje(sondaje);

                    retorno.result = 1;
                    retorno.message = Constantes.MensajeGenerico.MSG_OK_GRABAR;
                }

            }
            catch (Exception ex)
            {
                retorno.result = 0;
                retorno.message = Constantes.MensajeGenerico.MSG_ERROR_GENERICO;
                Logger.Error("Sondaje Controller:Modificar",this.UserLogon.CodigoUsuario, ex);
            }
            return Json(retorno, JsonRequestBehavior.AllowGet);
        }

        //
        // POST: /Sondaje/Delete/5
        /// <summary>
        /// Método para eliminar un sondaje
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        [HttpPost]
        public JsonResult Delete(int id)
        {
            Resultado retorno = new Resultado();
            try
            {
                using (var proxy = new SESondajeClient())
                {
                    proxy.EliminarSondaje(id);
                    retorno.result = 1;
                    retorno.message = Constantes.MensajeGenerico.MSG_OK_GENERICO;
                }
            }
            catch (Exception ex)
            {
                retorno.result = 0;
                retorno.message = Constantes.MensajeGenerico.MSG_ERROR_ELIMINAR;
                Logger.Error("Sondaje Controller:Delete", this.UserLogon.CodigoUsuario, ex);
            }
            return Json(retorno, JsonRequestBehavior.AllowGet);
        }
        //post
        /// <summary>
        /// Método para finalizar un sondaje
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        [HttpPost]
        public JsonResult Finalizar(int id)
        {
            Resultado retorno = new Resultado();
            try
            {
                //codigo sondaje
                List<int> sondajes = new List<int>();
                sondajes.Add(id);
                if (sondajes.Count > 0)
                {
                    string result = string.Empty;
                    using (var proxy = new SESondajeClient())
                    {
                        result = proxy.FinalizarSondaje(sondajes.ToArray());
                    }
                    if (result.CompareTo("Finalizado") == 0)
                    {
                        retorno.result = 1;
                        retorno.message = result;
                    }
                    else
                    {
                        retorno.result = 0;
                        retorno.message = result;
                    }
                }
            }
            catch (Exception ex)
            {
                retorno.result = 0;
                retorno.message = Constantes.MensajeGenerico.MSG_ERROR_GENERICO;
                Logger.Error("Sondaje Controller:Finalizar", this.UserLogon.CodigoUsuario, ex);
            }

            return Json(retorno, JsonRequestBehavior.AllowGet);
        }

        public JsonResult EstadoSondaje(int codigoSondaje)
        {

            Resultado retorno = new Resultado();
            try
            {
                using (var proxySondaje = new SESondajeClient())
                {
                    var sondaje = proxySondaje.ObtenerSondaje(codigoSondaje);
                    retorno.code = Convert.ToInt32(sondaje.Estado);
                }

                retorno.result = 1;
                retorno.message = "OK";

            }
            catch (Exception ex)
            {
                retorno.result = 0;
                retorno.message = Constantes.MensajeGenerico.MSG_ERROR_GENERICO;
                Logger.Error("Sondaje Controller:Estado Sondaje", this.UserLogon.CodigoUsuario, ex);

            }
            return Json(retorno, JsonRequestBehavior.AllowGet);
        }

    }
}
